'''
网页如果加载过慢，定位的元素可能出错，所以需要等待，等待网页加载
三种等待方式：
1）强制等待 sleep()
2）隐式等待，也叫全局等待。
   当元素定位不到时，就会等待查找，在等待时间范围内查找到即可，如果超时查找不到，则报异常，这种等待一般放在脚本的开头部分
    这种等待灵活度（只要元素查不到，就都在等待），精准度不够，可能等待时间过长，等待不起作用
    driver.implicitly_wait(10)
3）显式等待 针对于单个元素，需要设定等待的条件
     WebDriverWait(driver,30,0.5).until(条件)
     条件：expected_conditions模块中封装了一些条件

显式等待和隐式等待的区别：https://cp.baidu.com/landing/tscp_doc/4fa68cc3ca54ffc1726dead7a288fd15
'''
import time


from  selenium import webdriver
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

# 获取驱动
driver = webdriver.Edge()
# 通过驱动打开网页
driver.get("http://www.baidu.com")
# 隐式等待
driver.implicitly_wait(5)

#定位元素
driver.find_element("id","chat-textarea").send_keys("Java是什么")
# 显式等待
locator1=("id","chat-submit-button")
e = WebDriverWait(driver,20,0.5).until(expected_conditions.presence_of_element_located(locator=locator1))
e.click()
time.sleep(100)